Finish

@Serializable
data class Finish(val totalSteps: Int, val finishReason: FinishReason, val usage: Usage, val providerMetadata: Map<String, JsonElement>? = null, val rawFinishReason: String? = null) : StreamEvent

Loop ended — final aggregated finish reason + usage.

Constructors

Link copied to clipboard
constructor(totalSteps: Int, finishReason: FinishReason, usage: Usage, providerMetadata: Map<String, JsonElement>? = null, rawFinishReason: String? = null)

Properties

Link copied to clipboard
Link copied to clipboard
val StreamEvent.metadata: Map<String, JsonElement>?
Link copied to clipboard
val providerMetadata: Map<String, JsonElement>?

Provider-specific summary payload on completion (per historical parity gap #18 slice). Routing layers measure end-to-end cache rate here without parsing each step.

Link copied to clipboard

The provider's OWN finish-reason string, before mapping. The mapped finishReason collapses unknown values to FinishReason.Other — but for diagnosing a provider-side abort the raw string is the evidence; never discard it.

Link copied to clipboard
Link copied to clipboard

Functions

Link copied to clipboard
inline fun <T> StreamEvent.providerMetadataAs(provider: String): T?
fun <T> StreamEvent.providerMetadataAs(provider: String, serializer: KSerializer<T>): T?